﻿Imports System
Imports System.IO
Imports System.Text
Imports System.Drawing

Public Class HtmlWriter

 Private pfad As String
    Private imageNumber As Integer
    Private bookStream
    Private indexScriptStream
    Private bookNameString As String
    Private utf8 As Encoding = New UTF8Encoding


    ' String in dem der Inhalt des indexScriptes gespeichert wird
    Private indexScript As String
    ' String in dem der Inhalt des index für die Html Seite gespeichert wird
    Private indexHtml As String
    ' String in dem der Inhalt des restlichen Buches für die Html Seite gespeichert wird
    Private bookHtml As String

    ' Speichert die Anzahl der Seiten
    Private pageNumber As Integer

    ' Variable die anzeigt ob ein neuer Titel gesetzt wird
    Private newTitle As Boolean

    ' String in den Der Titel einer seite eingespeichert wird
    Private newTitleString As String

    ' Konstruktor der Klasse.
    ' Initialisert Variablen und legt HTML File an.
    ' bekommt als Übergabeparameter den Namen des Buches
    Sub New(ByVal bookName As String, ByVal pfadString As String)

        imageNumber = 0
        pageNumber = 1


        If (pfadString = "") Then

            pfadString = "C:\"
        End If

        Me.pfad = pfadString

        System.IO.Directory.CreateDirectory(pfad + "/" + bookName)
        System.IO.Directory.CreateDirectory(pfad + "/" + bookName + "/script")
        System.IO.Directory.CreateDirectory(pfad + "/" + bookName + "/image")
        'Dim di As New System.IO.DirectoryInfo(pfad + "/" + bookName)
        'di.Create()

        'Dim di2 As New System.IO.DirectoryInfo(pfad + "/" + bookName + "/script")
        'di2.Create()

        Me.bookStream = New System.IO.StreamWriter(Me.pfad + bookName + "/index.html")
        Me.bookNameString = bookName
        Me.bookStream.Write("<!DOCTYPE html><html><head><title>" + bookName + "</title>")
        Me.bookStream.Write("<script src=" + Chr(34) + "http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js" + Chr(34) + "type=" + Chr(34) + "text/javascript" + Chr(34) + "></script>")
        Me.bookStream.Write("<script src=" + Chr(34) + "https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.9/jquery-ui.min.js" + Chr(34) + "type=" + Chr(34) + "text/javascript" + Chr(34) + "></script>")
        Me.bookStream.Write("<script src=" + Chr(34) + "http://www.panthes.de/teamprojekt/booklet/jquery.easing.1.3.js" + Chr(34) + "type=" + Chr(34) + "text/javascript" + Chr(34) + "></script>")
        Me.bookStream.Write("<script src=" + Chr(34) + "http://www.panthes.de/teamprojekt/booklet/jquery.booklet.1.2.0.min.js" + Chr(34) + "type=" + Chr(34) + "text/javascript" + Chr(34) + "></script>")
        Me.bookStream.Write("<link href=" + Chr(34) + "http://www.panthes.de/teamprojekt/booklet/jquery.booklet.1.2.0.css" + Chr(34) + " type=" + Chr(34) + "text/css" + Chr(34) + " rel=" + Chr(34) + "stylesheet" + Chr(34) + " media=" + Chr(34) + "screen, projection, tv" + Chr(34) + "/>")
        Me.bookStream.Write("<script src=" + Chr(34) + "script/index.js" + Chr(34) + "type=" + Chr(34) + "text/javascript" + Chr(34) + "></script>")
        Me.bookStream.Write("<script type=" + Chr(34) + "text/javascript" + Chr(34) + ">$(function() {$('#mybook').booklet({manual:   false,overlays: true, hovers:   true, width:  800, height: 500 });});</script>")
        Me.bookStream.Write("<style type=" + Chr(34) + "text/css" + Chr(34) + "> body { background-color:#000000; f} </style> </head> <body> <header> </header> <nav> </nav> <section > <div id=" + Chr(34) + "mybook" + Chr(34) + "> <div class=" + Chr(34) + "b-load" + Chr(34) + ">")


        'Me.bookStream.Write("<div> </div>")
        Me.bookStream.Close()
        Me.bookStream.Dispose()


        'Me.indexScriptStream = New System.IO.StreamWriter(Me.pfad + bookName + "/script/index.js")

        indexScript = "$(function() {"

        indexHtml = "<div> <h2>Inhaltsverzeichniss</h2>"

        bookHtml = ""

        newTitle = False
    End Sub

    ' Funktion um eine Kapitelüberschrift in das Buch zu schreiben
    ' bekommt als Übergabeparameter den zu schreibenden Text, die größe der Schrift, die SchriftFarbe, den Schrifttyp, und je einen Boolean um zu bestimmen ob Dick, ob Kursiv und ob Unterstrichen
    Public Sub writeTitle(ByVal textString As String, ByVal sizeValue As Integer, ByVal colorValue As String, ByVal textStyle As String, ByVal boldStyle As Boolean, ByVal cursiveStyle As Boolean, ByVal underlineStyle As Boolean)

        'If (textStyle != "Antiqua" || textStyle != "Antiqua" || textStyle != "Antiqua" || textStyle != "Antiqua" || textStyle != "Arial" || textStyle != "Avqest" || textStyle != "Blackletter" || textStyle != "Calibri" || textStyle != "Comic Sans" || textStyle != "Courier" || textStyle != "Decorative" || textStyle != "Fraktur" || textStyle != "Frosty" || textStyle != "Garamond" || textStyle != "Georgia" || textStyle != "Helvetica" || textStyle != "Impact" || textStyle != "Minion" || textStyle != "Modern" || textStyle != "Monospace" || textStyle != "Palatino" || textStyle != "Roman" || textStyle != "Script" || textStyle != "Swiss" || textStyle != "Times New Roman" || textStyle != "Verdana") Then
        '    ' error, gehlermeldung zurück geben
        'End If

        If (boldStyle) Then
            bookHtml = bookHtml + "<b>"
        End If

        If (cursiveStyle) Then
            bookHtml = bookHtml + "<i>"
        End If

        If (underlineStyle) Then
            bookHtml = bookHtml + "<u>"
        End If


        bookHtml = bookHtml + "<font size=" + Chr(34) + sizeValue.ToString + "style = " + Chr(34) + "font-family: " + textStyle + Chr(34) + " pt" + Chr(34) + " color=" + Chr(34) + colorValue + Chr(34) + ">" + textString + "</font>"


        If (underlineStyle) Then
            bookHtml = bookHtml + "</u>"
        End If

        If (cursiveStyle) Then
            bookHtml = bookHtml + "</i>"
        End If

        If (boldStyle) Then
            bookHtml = bookHtml + "</b>"
        End If

        newTitleString = newTitleString + textString
        newTitle = True
    End Sub


    ' Funktion die den aktuellen Titel in das Inhaltsverzeichniss schreiben lässt. Wird automatisch bei neuer Seite aufgerufen
    ' Ermöglicht es einen Titel aus mehreren verschiednenen Teilen zusammen zu setzen und 2 Titel auf eine Seite zu schreiben
    ' Muss vom entwickler auch aufgerufen werden wenn mehr als eine Kapitelübschrift auf einer Seite Steht
    Public Sub newTitleatTheSameSide()
        If (newTitle) Then

            writeIndex(newTitleString)

            newTitleString = ""
            newTitle = False

        End If
    End Sub


    ' Funktion um einen Text in das Buch zu schreiben
    ' bekommt als Übergabeparameter den zu schreibenden Text, die größe der Schrift, die SchriftFarbe, den Schrifttyp, und je einen Boolean um zu bestimmen ob Dick, ob Kursiv und ob Unterstrichen
    Public Sub writeText(ByVal textString As String, ByVal sizeValue As Integer, ByVal colorValue As String, ByVal textStyle As String, ByVal boldStyle As Boolean, ByVal cursiveStyle As Boolean, ByVal underlineStyle As Boolean)

        ' Me.bookStream = New System.IO.StreamWriter(Me.pfad + bookNameString + ".html", True, utf8, 99999999)

        'If (textStyle != "Antiqua" || textStyle != "Antiqua" || textStyle != "Antiqua" || textStyle != "Antiqua" || textStyle != "Arial" || textStyle != "Avqest" || textStyle != "Blackletter" || textStyle != "Calibri" || textStyle != "Comic Sans" || textStyle != "Courier" || textStyle != "Decorative" || textStyle != "Fraktur" || textStyle != "Frosty" || textStyle != "Garamond" || textStyle != "Georgia" || textStyle != "Helvetica" || textStyle != "Impact" || textStyle != "Minion" || textStyle != "Modern" || textStyle != "Monospace" || textStyle != "Palatino" || textStyle != "Roman" || textStyle != "Script" || textStyle != "Swiss" || textStyle != "Times New Roman" || textStyle != "Verdana") Then
        '    ' error, gehlermeldung zurück geben
        '    textStyle = "noTextStyle"
        'End If


        If (boldStyle) Then
            bookHtml = bookHtml + "<b>"
        End If

        If (cursiveStyle) Then
            bookHtml = bookHtml + "<i>"
        End If

        If (underlineStyle) Then
            bookHtml = bookHtml + "<u>"
        End If

        bookHtml = bookHtml + "<font size=" + Chr(34) + sizeValue.ToString + "style = " + Chr(34) + "font-family: " + textStyle + Chr(34) + " pt" + Chr(34) + " color=" + Chr(34) + colorValue + Chr(34) + ">" + textString + "</font>"

        If (underlineStyle) Then
            bookHtml = bookHtml + "</u>"
        End If

        If (cursiveStyle) Then
            bookHtml = bookHtml + "</i>"
        End If

        If (boldStyle) Then
            bookHtml = bookHtml + "</b>"
        End If
    End Sub


    ' Funktion um einen Zeilenumbruch zu schreiben
    Public Sub writeLineBrake()
        bookHtml = bookHtml + "<br>"
    End Sub

    ' Funktion um einen mehrere Leerzeichen(Tabulator) in das Buch zu schreiben
    Public Sub writeTab()
        bookHtml = bookHtml + "&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;"
    End Sub

    ' Funktion um ein Leerzeichen in das Buch zu schreiben
    Public Sub writeSpace()
        bookHtml = bookHtml + "&ensp;"
    End Sub

    ' Funktion um ein Leere Zeile in das Buch zu schreiben
    Public Sub writeBlankLine()
        bookHtml = bookHtml + "<br></br>"
    End Sub

    ' Funktion ein Bild in das Buch zu zeichnen
    ' bekommt als Übergabeparameter den Pfad des Bildes die gewünschte Größe
    Public Sub setImage(ByVal imagePfad As String, ByVal width As Integer, ByVal height As Integer, ByVal topValue As Integer, ByVal leftValue As Integer)
        ' Bild muss aus Pfad kopiert werden und neue Bilddatei erstellt werden mit der dann gearbeitet wird

        Dim image1 As Image = Image.FromFile(imagePfad)


        'Pfad dynamisch machen damit man ds projekt irgendwohn speichern kann
        Try
            image1.Save(Me.pfad + bookNameString + "\image\image" + imageNumber.ToString + ".jpg")
        Catch ex As Exception
            Dim fehler As String = ex.ToString

        End Try

        'schauen auf welche seite es kommt damit die pixelanzahl stimmt

        'image1.Save("c:\button.gif", System.Drawing.Imaging.ImageFormat.Gif)

        ' in html document scheiben

        bookHtml = bookHtml + "<div  style=" + Chr(34) + "position:absolute; top:" + topValue.ToString + "px; left:" + leftValue.ToString + "px; " + Chr(34) + ">"
        bookHtml = bookHtml + "<img width=" + Chr(34) + width.ToString + "px" + Chr(34) + " height=" + Chr(34) + height.ToString + "px" + Chr(34) + " alt= " + Chr(34) + Chr(34) + " src=" + Chr(34) + "image/image" + imageNumber.ToString + ".jpg" + Chr(34) + ">"
        bookHtml = bookHtml + "</div>"

        imageNumber = imageNumber + 1
    End Sub


    ' Funktion um auf die nächste in das Buch zu schreiben
    Public Sub nextPage()

        ' Titel in Inhaltsverzeichniss schreiben wenn erforderlich
        newTitleatTheSameSide()

        pageNumber = pageNumber + 1


        bookHtml = bookHtml + "</div><div>"

    End Sub

    ' Funktion um das Inhaltsverzeichnis in das Buch zu schreiben
    Private Sub writeIndex(ByVal textString As String)

        ' in index Script einfügen
        indexScript = indexScript + "$('#custom-link-" + pageNumber.ToString + "').click(function(e){ e.preventDefault(); $('#mybook').booklet( " + pageNumber.ToString + ");  });"

        'in indexHtml einfügen
        indexHtml = indexHtml + "<a id=" + Chr(34) + "custom-link-" + pageNumber.ToString + Chr(34) + " href= " + Chr(34) + "#" + Chr(34) + ">" + textString + "</a> <br>"

    End Sub

    ' Funktion die das Buch abschließt
    Public Sub finishBook()
        ' script abschließen
        indexScript = indexScript + "});"

        ' indexHtml abschließen
        indexHtml = indexHtml + "</div>"


        Me.bookStream = New System.IO.StreamWriter(Me.pfad + bookNameString + "/index.html", True, utf8, 99999999)

        ' ToDo: Stream zusammen basteln
        Me.bookStream.Write(indexHtml)
        Me.bookStream.Write("<div>" + bookHtml + "</div> </div> </div> </section> </body> </html>")

        ' Me.bookStream = New System.IO.StreamWriter(Me.pfad + bookNameString + ".html", True, utf8, 2048)
        ' Me.bookStream.Write("</div> </div> </div> </section> </body> </html>")
        Me.bookStream.Close()
        Me.bookStream.Dispose()

        Me.indexScriptStream = New System.IO.StreamWriter(Me.pfad + bookNameString + "/script/index.js")

        ' ToDo: Stream zusammen basteln
        Me.indexScriptStream.Write(indexScript)

        Me.indexScriptStream.Close()
        Me.indexScriptStream.Dispose()

    End Sub





    ' Altes Zeug
    ' Kann gelöscht werden, ist nur noch drin damit Urs keine Fehler mehr bekommt beim Compilieren. Die Ftunktionen sind nur noch als Stubs vorhanden.


    ' Funktion um einen normalen Text in das Buch zu schreiben
    ' bekommt als Übergabeparameter den zu schreibenden Text
    Public Sub writeText(ByVal textString As String)


    End Sub


    Public Sub writeTextSpan(ByVal textString As String)

        ' Funktion kann gelöscht werden
        ' bookHtml = bookHtml + "<span>" + textString + "</span>"
    End Sub




    ' Funktion um einen Text in das Buch zu schreiben
    ' bekommt als Übergabeparameter den zu schreibenden Text, die größe der schrift die SchriftFarbe und den schrifttyp
    Public Sub writeText(ByVal textString As String, ByVal sizeValue As Integer, ByVal colorValue As String, ByVal textStyle As String)

        ' Funktion kann gelöscht werden
    End Sub

    ' Funktion um einen normalen Text in das Buch zu schreiben
    ' bekommt als Übergabeparameter den zu schreibenden Text
    Public Sub writeText(ByVal textString As String)

        ' Funktion kann gelöscht werden
    End Sub


    Public Sub writeTextSpan(ByVal textString As String)

        ' Funktion kann gelöscht werden
    End Sub


End Class
